﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Platform.ObjectModel.Design;
using Platform.ObjectModel.Validation;
using Platform.Infrastructure;

namespace Platform.ObjectModel
{

	/// <summary>
	/// Contexto de execução do documento
	/// </summary>
	public class DocumentContext
	{
		private ValidationResult result = new ValidationResult();

		internal DocumentContext( DocumentFlake document, Schema schema )
		{
			Arguments.IsNotNull( "document", document );
			Arguments.IsNotNull( "schema", schema );

			this.Document = document;
			this.Schema = schema;
			this.StorageDocument = new List<StorageSlot>();
		}

		/// <summary>
		/// Obtém os dados do documento que está sendo salvo
		/// </summary>
		public DocumentFlake Document	// TODO : Alterar para um conjunto de documentos
		{ get; private set; }

		/// <summary>
		/// Obtém o schema do documento
		/// </summary>
		public Schema Schema	// TODO: Alterar para um conjunto de schemas
		{ get; private set; }

		/// <summary>
		/// Obtém ou define o objeto que irá fazer a validação do documento
		/// </summary>
		public IDataObjectValidator Validator
		{ get; set; }

		/// <summary>
		/// Obtém ou define a lista de documentos que devem ser persistidos no banco de dados
		/// </summary>
		/// <remarks>
		/// Esses documentos vão ser tanto atualizados quanto excluídos
		/// </remarks>
		public IList<StorageSlot> StorageDocument
		{ get; private set; }

		/// <summary>
		/// Obtém o resultado da validação do documento
		/// </summary>
		public ValidationResult Result
		{
			get { return this.result; }
			set { this.result = value ?? new ValidationResult(); }
		}
	}


}
